﻿/**********************************************************************
 * @file   FITKLoadExcitationForceMoments.h
 * @brief  力和力矩的载荷数据类声明
 * @author liuzhonghua (liuzhonghuaszch@163.com)
 * @date   2024-12-05
 *********************************************************************/

#ifndef _FITK_LOAD_EXCITATION_FORCEMOMENTS_H_
#define _FITK_LOAD_EXCITATION_FORCEMOMENTS_H_

#include "FITKAcousticsPhysicsAPI.h"
#include "FITKLoadAbsExcitation.h"

namespace Acoustics
{
    class FITKAcousticsAbstractSpectra;
    /**
     * @brief  力和力矩的载荷数据类
     * @author liuzhonghua (liuzhonghuaszch@163.com)
     * @date   2024-12-05
     */
    class  FITKAcousticsPhysicsAPI FITKLoadExcitationForceMoments :
        public FITKLoadAbsExcitation
    {
        FITKCLASS(Acoustics, FITKLoadExcitationForceMoments);
        Q_OBJECT;
    public:
        /**
         * @brief    Create the FITKLoadExcitationForceMoments object
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        explicit FITKLoadExcitationForceMoments();
        /**
         * @brief    Destroy the FITKLoadExcitationForceMoments object
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        virtual ~FITKLoadExcitationForceMoments();
        /**
         * @brief    Get the Acoustics Load Type object
         * @return   AcousticsLoadType
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        virtual AcousticsLoadType getAcousticsLoadType() override;
        /**
         * @brief    拷贝数据
         * @param[i] obj
         * @return   bool
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        virtual bool copy(FITKAbstractDataObject* obj) override;
        /**
         * @brief    设置间接辐射启用状态
         * @param[i] state 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-12
         */
        void setIndirectRadiation(bool state);
        /**
         * @brief    获取间接辐射启用状态
         * @return   bool
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-12
         */
        bool getIndirectRadiation();
        /**
         * @brief    设置力谱ID
         * @param[i] spectraID
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void setForceSpectraID(int spectraID);
        /**
         * @brief    获取力谱ID
         * @return   int
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        int getForceSpectraID();
        /**
         * @brief    获取力谱数据对象
         * @return   FITKAcousticsAbstractSpectra *
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        FITKAcousticsAbstractSpectra* getForceSpectraObj();
        /**
         * @brief    设置力方向
         * @param[i] forceOrien 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void setForceOrientationVec(double* forceOrien);
        /**
         * @brief    获取力方向
         * @param[o] forceOrien 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void getForceOrientationVec(double* forceOrien);
        /**
         * @brief    设置力矩谱ID
         * @param[i] spectraID
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void setMomentSpectraID(int spectraID);
        /**
         * @brief    获取力矩谱ID
         * @return   int
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        int getMomentSpectraID();
        /**
         * @brief    获取力矩谱数据对象
         * @return   FITKAcousticsAbstractSpectra *
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        FITKAcousticsAbstractSpectra* getMomentSpectraObj();
        /**
         * @brief    设置力矩方向
         * @param[i] momentOrien
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void setMomentOrientationVec(double* momentOrien);
        /**
         * @brief    获取力矩方向
         * @param[o] momentOrien
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void getMomentOrientationVec(double* momentOrien);
        /**
         * @brief    设置偏移量
         * @param[i] offset 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void setOffsetValue(double* offset);
        /**
         * @brief    获取偏移量
         * @param[o] offset 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-12-05
         */
        void getOffsetValue(double* offset);
        /**
         * @brief    设置节点ID
         * @param[i] nodeID 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-01-17
         */
        void setFENodeID(int nodeID);
        /**
         * @brief    获取节点ID
         * @return   int
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-01-17
         */
        int getFENodeID();

    private:
        /**
         * @brief  间接辐射启用状态
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-12
         */
        bool _indirectRadiation{ false };
        /**
         * @brief  力谱ID
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        int _forceSpectraID{ -1 };
        /**
         * @brief  力方向{x,y,z}
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        double _forceOrientationVec[3]{ 1.0,0.0,0.0 };
        /**
         * @brief  力矩谱ID
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        int _momentSpectraID{ -1 };
        /**
         * @brief  力矩方向{x,y,z}
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        double _momentOrientationVec[3]{ 0.0,1.0,0.0 };
        /**
         * @brief  偏移量{x,y,z}
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2024-12-05
         */
        double _offsetValue[3]{ 0.0,0.0,0.0 };
        /**
         * @brief  节点ID
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-01-17
         */
        int _nodeIDFE{ -1 };
    };
}


#endif // _FITK_LOAD_CONSTRAINT_FESUBSYS_H_